
var ODM = require('./odm');

/**
 * 
 * Modelo
 */

var Registro = function(){ 
	this.nombre; //es el nombre de contacto
	this.telefonos = new Array();//= arrayTelefonos;
	this.direcciones= new Array();// = arrayDirecciones;
};
var Registro = function(n,ds,ts){ 
	this.nombre = n; //es el nombre de contacto
	this.telefonos = ts;//= arrayTelefonos;
	this.direcciones= ds;// = arrayDirecciones;
};

Registro.prototype.getNombre=function(){
	return this.nombre;
};

Registro.prototype.addTelefono=function(id, numero, prefijo){
	this.telefonos.push(new Telefono(id, numero, prefijo));
};

var Persona = function(nom, arTelefonos, arDirecciones){
	this.nombre = nom;
	this.telefonos= arTelefonos;
	this.direcciones=arDirecciones;
};

//var Persona = function(){
//	this.cumpleaños;
//};
Persona.prototype = new Registro();

var Empresa = function(n,c){
	this.nombrePersonaContacto = n;
	this.cuit=c;
};

Empresa.prototype = new Registro();


var Telefono = function(id, num, pref){ 
	this.identificador = id; //celular, etc
	this.numero= num; 
	this.prefijo=pref;
};

var Direccion = function(i,dir,c, p){ 
	this.identificador = i; //casa, oficina, sucursal n
	this.direccion= dir; 
	this.cp = c;
	this.provincia=p;
};

/**
 * Capa de persistencia -> mongo skin
  * esta es la capa de persistencia
 * si bien el save es trivial por la compatibilidad de js
 * el recuperar implica recuperar un objeto del mismo tipo del q se persistio
 */

db = require('mongoskin').db('localhost:27017/test');

var ODM = function(){};
//var ODM = new Object(); usar el q prefieran


function getMembers(obj) {
	var members = new Array();
	var i = 0;

	for (var member in obj) {
		members[i] = member;
		i++;
	};

	return members.sort();
};

function inflate(obj) {
	var myObj = new Object();
	
	var arrayDeAtributos = this.getMembers(obj);
	
	for ( var atributo in arrayDeAtributos) {
		myObj[atributo]=obj.atributo;
	}
	return myObj;
};

ODM.prototype.getObjAtributes = function getMembers(obj) {
	var members = new Array();
	var i = 0;

	for (var member in obj) {
		members[i] = member;
		i++;
	};

	return members.sort();
};

ODM.prototype.inflateObject = function inflate(obj) {
	var myObj = new Object();
	
	var arrayDeAtributos = this.getObjAtributes(obj);
	
	for ( var atributo in arrayDeAtributos) {
		myObj[atributo]=obj.atributo;
	}
	return myObj;
};

ODM.prototype.getAPersonaById=function(){
	db.collection('boludez').findOne({id:2}, function(err, result) {
	   console.log(result);
	});
};

ODM.prototype.getAPersonaByName=function(aName){
	db.collection('boludez').findOne({nombre: aName}, function(err, result) {
		var persona = new Persona(result.nombre, result.telefonos, result.direcciones);
		console.log(persona);
		console.log(persona.getNombre());
		
		persona.addTelefono("AGREGADO", "22222222", "011");
		 db.close();
		});
};

ODM.prototype.save=function(aRegistro){
	db.collection('boludez').save(aRegistro, function(err, result) {
	    if (err) throw err;
	    if (result) console.log('Added!');
	    db.close();
	});
};


ODM.prototype.getAPersonaByName2=function(aName){
	db.collection('boludez').findOne({nombre: aName}, function(err, result) {
	
		var p = inflate(result);
		
		console.log(p.getNombre());
		
//		return persona;
		 db.close();
	})	;
};


/*/////////////////////7/////////////////////7/////////////////////7/////////////////////
 * /////////////////////7/////////////////////7/////////////////////7
 *MAIN
 * */


var odm = new ODM();

var hernan = new Persona("Hernan", 
		[{identificador:"casa",	numero:"4253-6677" },
			{identificador:"celular",numero:"15-63523232" }
		],
		[
		 	{identificador: "Casa", direccion: "Calle falsa 1234",provincia: "Buenos Aires"}
		]
);

var marcia = new Persona("MarciaT", 
		[ {identificador:"celular",numero:"15-63523232" }
		],
		[]
);


//console.log(typeof personaX);
//odm.save(hernan);
odm.getAPersonaByName2("Hernan");
//marcia.addTelefono("Casa", "22222222", "011");
//console.log(marcia);
//console.log(typeof personaX);

module.exports = Registro;
module.exports = Empresa;
module.exports = Persona;
module.exports = Telefono;
module.exports = Direccion;



